﻿///*****************************************************
// * 本类库的核心系 JNTemplate
// * (C) JNTemplate 2011
// * 作者：翅膀的初衷 QQ:4585839
// * 网址：http://www.JiNianNet.com
// *****************************************************/
//using System;
//using System.Collections.Generic;
//using System.Text;
//using System.Text.RegularExpressions;
//using System.Collections;

//namespace JinianNet.JNTemplate.Process
//{
//    public class LogicParser
//    {
//        public bool CompareObject(object x, object y, string operators)
//        {
//            if (x == null)
//                return y == null;
//            if (x == null)
//                return x == null;
//            string str1=x.ToString(), str2=y.ToString();
//            if (ParserRegex.Number.Match(str1).Success && ParserRegex.Number.Match(str2).Success)
//                return CompareExpression(int.Parse(str1), int.Parse(str2),operators);
//            if (ParserRegex.Double.Match(str1).Success && ParserRegex.Double.Match(str2).Success)
//                return CompareExpression(double.Parse(str1), double.Parse(str2), operators);
//            return CompareExpression(str1, str2, operators);
//        }

//        public bool CompareExpression(double x, double y, string operators)
//        {
//            switch (operators)
//            {
//                case ">":
//                    return x > y;
//                case "<":
//                    return x < y;
//                case ">=":
//                    return x >= y;
//                case "<=":
//                    return x <= y;
//                case "==":
//                    return x == y;
//                case "!=":
//                    return x != y;
//                default:
//                    return false;
//            }
//        }

//        public bool CompareExpression(int x, int y, string operators)
//        {
//            switch (operators)
//            {
//                case ">":
//                    return x > y;
//                case "<":
//                    return x < y;
//                case ">=":
//                    return x >= y;
//                case "<=":
//                    return x <= y;
//                case "==":
//                    return x == y;
//                case "!=":
//                    return x != y;
//                default:
//                    return false;
//            }
//        }

//        public bool CompareExpression(string x, string y, string operators)
//        {
//            if (x == null)
//                return y == null;
//            if (y == null)
//                return x == null;
//            switch (operators)
//            {
//                case "==":
//                    return x == y || x.Equals(y);
//                case "!=":
//                    return x != y || !x.Equals(y);
//                default:
//                    return false;
//            }
//        }


//        #region
//        /// <summary>
//        /// 加减乘除运算，支持括号优先级(注：该方法来源于网络)
//        /// </summary>
//        /// <param name="Expression"></param>
//        /// <returns></returns>
//        public string CalculateParenthesesExpression(string Expression) {
//            ArrayList operatorList = new ArrayList();
//            string operator1;
//            string ExpressionString = "";
//            string operand3;
//            Expression = Expression.Replace(" ", "");
//            while (Expression.Length > 0) {
//                operand3 = "";
//                //取数字处理
//                if (Char.IsNumber(Expression[0])) {
//                    while (Char.IsNumber(Expression[0])) {
//                        operand3 += Expression[0].ToString();
//                        Expression = Expression.Substring(1);
//                        if (Expression == "") break;


//                    }
//                    ExpressionString += operand3 + "|";
//                }

//                //取“C”处理
//                if (Expression.Length > 0 && Expression[0].ToString() == "(") {
//                    operatorList.Add("(");
//                    Expression = Expression.Substring(1);
//                }

//                //取“)”处理
//                operand3 = "";
//                if (Expression.Length > 0 && Expression[0].ToString() == ")") {
//                    do {

//                        if (operatorList[operatorList.Count - 1].ToString() != "(") {
//                            operand3 += operatorList[operatorList.Count - 1].ToString() + "|";
//                            operatorList.RemoveAt(operatorList.Count - 1);
//                        }
//                        else {
//                            operatorList.RemoveAt(operatorList.Count - 1);
//                            break;
//                        }

//                    } while (true);
//                    ExpressionString += operand3;
//                    Expression = Expression.Substring(1);
//                }

//                //取运算符号处理
//                operand3 = "";
//                if (Expression.Length > 0 && (Expression[0].ToString() == "*" || Expression[0].ToString() == "/" || Expression[0].ToString() == "+" || Expression[0].ToString() == "-")) {
//                    operator1 = Expression[0].ToString();
//                    if (operatorList.Count > 0) {

//                        if (operatorList[operatorList.Count - 1].ToString() == "(" || verifyOperatorPriority(operator1, operatorList[operatorList.Count - 1].ToString())) {
//                            operatorList.Add(operator1);
//                        }
//                        else {
//                            operand3 += operatorList[operatorList.Count - 1].ToString() + "|";
//                            operatorList.RemoveAt(operatorList.Count - 1);
//                            operatorList.Add(operator1);
//                            ExpressionString += operand3;

//                        }

//                    }
//                    else {
//                        operatorList.Add(operator1);
//                    }
//                    Expression = Expression.Substring(1);
//                }
//            }

//            operand3 = "";
//            while (operatorList.Count != 0) {
//                operand3 += operatorList[operatorList.Count - 1].ToString() + "|";
//                operatorList.RemoveAt(operatorList.Count - 1);
//            }

//            ExpressionString += operand3.Substring(0, operand3.Length - 1); ;


//            return CalculateParenthesesExpressionEx(ExpressionString);

//        }


//        private string CalculateParenthesesExpressionEx(string Expression) {
//            //定义两个栈
//            ArrayList operandList = new ArrayList();
//            float operand1;
//            float operand2;
//            string[] operand3;

//            Expression = Expression.Replace(" ", "");
//            operand3 = Expression.Split(Convert.ToChar("|"));

//            for (int i = 0; i < operand3.Length; i++) {
//                if (Char.IsNumber(operand3[i], 0)) {
//                    operandList.Add(operand3[i].ToString());
//                }
//                else {
//                    //两个操作数退栈和一个操作符退栈计算
//                    operand2 = (float)Convert.ToDouble(operandList[operandList.Count - 1]);
//                    operandList.RemoveAt(operandList.Count - 1);
//                    operand1 = (float)Convert.ToDouble(operandList[operandList.Count - 1]);
//                    operandList.RemoveAt(operandList.Count - 1);
//                    operandList.Add(calculate(operand1, operand2, operand3[i]).ToString());
//                }

//            }


//            return operandList[0].ToString();
//        }


//        //判断两个运算符优先级别
//        private bool verifyOperatorPriority(string Operator1, string Operator2) {

//            if (Operator1 == "*" && Operator2 == "+")
//                return true;
//            else if (Operator1 == "*" && Operator2 == "-")
//                return true;
//            else if (Operator1 == "/" && Operator2 == "+")
//                return true;
//            else if (Operator1 == "/" && Operator2 == "-")
//                return true;
//            else
//                return false;
//        }

//        //计算
//        private float calculate(float operand1, float operand2, string operator2) {
//            switch (operator2) {
//                case "*":
//                    operand1 *= operand2;
//                    break;
//                case "/":
//                    operand1 /= operand2;
//                    break;
//                case "+":
//                    operand1 += operand2;
//                    break;
//                case "-":
//                    operand1 -= operand2;
//                    break;
//                default:
//                    break;
//            }
//            return operand1;
//        }
//        #endregion
//    }
//}
